gaming method (constantly runs):

    while (game_running == TRUE)
    {
        while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) == TRUE)
        {
            if (msg.message == WM_QUIT)
                game_running = FALSE;

            TranslateMessage(&msg);
            DispatchMessage(&msg);
        };

        /* do stuff */
    };


common method (sleeps if no message is there):

    while (GetMessage(&msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);

        /* do stuff */
    };